package com.hxzy.vo;

import com.fasterxml.jackson.annotation.JsonIgnore;
import com.hxzy.entity.system.SysUser;
import lombok.Getter;
import lombok.Setter;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.authority.SimpleGrantedAuthority;
import org.springframework.security.core.userdetails.UserDetails;

import java.util.Collection;
import java.util.Date;
import java.util.HashSet;
import java.util.Set;

/**
 * 管理员（商户）登录模型
 */
@Getter
@Setter
public class AdminLoginVO  implements UserDetails {
    /**
     * 商户信息
     */
    private SysUser sysUser;


    /**
     * 角色
     */
    private Set<String>  roleSet;


    /**
     * 菜单权限
     */
    private Set<String> permsSet;

    /**
     * 令牌
     */
    private String uuid;

    /**
     * 令牌创建时间
     */
    private Date createTime;
    /**
     * 令牌过期时间
     */
    private Date expiredTimer;


    /**
     * 判断是否是超级管理员，  序列到json吗？   @JsonIgnore 不要序列化这个方法
     * @return
     */
    @JsonIgnore
    public boolean isSuperMan(){
        return roleSet.contains("admin");
    }


    /**
     * 取得当前用户权限
     * @return
     */
    @JsonIgnore
    @Override
    public Collection<? extends GrantedAuthority> getAuthorities() {
        Set<SimpleGrantedAuthority>  set=new HashSet<>();
        //角色
        this.getRoleSet().forEach(s -> {
            SimpleGrantedAuthority sg=new SimpleGrantedAuthority("ROLE_"+s);
            set.add(sg);
        });

        //菜单权限
        this.getPermsSet().forEach(s-> {
            SimpleGrantedAuthority sg=new SimpleGrantedAuthority(s);
            set.add(sg);
        });
        return set;
    }

    /**
     * 取得数据库加密的密码
     * @return
     */
    @JsonIgnore
    @Override
    public String getPassword() {
        return this.sysUser.getPassword();
    }

    /**
     * 取得登录用户名
     * @return
     */
    @JsonIgnore
    @Override
    public String getUsername() {
        return this.sysUser.getUsername();
    }

    /**
     * 账户没有过期
     * @return
     */
    @JsonIgnore
    @Override
    public boolean isAccountNonExpired() {
        return true;
    }

    /**
     * 账户没有锁定
     * @return
     */
    @JsonIgnore
    @Override
    public boolean isAccountNonLocked() {
        return true;
    }

    /**
     * 认证没有过期
     * @return
     */
    @JsonIgnore
    @Override
    public boolean isCredentialsNonExpired() {
        return true;
    }

    /**
     * 启用账户
     * @return
     */
    @JsonIgnore
    @Override
    public boolean isEnabled() {
        return true;
    }
}
